/** * Դ�������ƣ�ValidateJob.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.ui * ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع��� * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.ui.editor.validate; import java.util.Arrays; import java.util.ConcurrentModificationException; import java.util.Map; import org.apache.commons.lang.ObjectUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.IValidateConstant; import com.hundsun.ares.studio.core.preferences.ErrorCheckPreferenceHelper; import com.hundsun.ares.studio.ui.editor.ARESEditorPlugin; import com.hundsun.ares.studio.ui.validate.IProblemPool; import com.hundsun.ares.studio.ui.validate.IValidateUnit; /** * ������֤Job������ͬһ���͵Ĵ�����֤���������� * @author gongyf * */ public class ValidateJob extends Job { /** * ������֤JOB���ڵļ��� */ public final static Object FAMILY = new Object(); private IValidateUnit[] units; private IProblemPool problempool; private Map<Object, Object> context; /** * @param name */ public ValidateJob(String name) { super(name); } /** * @param context the context to set */ public void setContext(Map<Object, Object> context) { this.context = context; } /** * @param problempool the problempool to set */ public void setProblempool(IProblemPool problempool) { this.problempool = problempool; } /** * @param units the units to set */ public void setUnits(IValidateUnit[] units) { this.units = units; } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object) */ @Override public boolean belongsTo(Object family) { // ���еĴ�����job������һ���� return family == FAMILY; } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#shouldRun() */ @Override public boolean shouldRun() { // ��������Ƶ�job���ڣ�����Ҫ�����ˣ������еĻ������һ�����Ƶ�job // Job[] jobs = getJobManager().find(FAMILY); // for (Job job : jobs) { // if (job != this && job.equals(this)) { // return false; // } // } return true; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj instanceof ValidateJob) { ValidateJob other = (ValidateJob)obj; if (Arrays.equals(units, other.units) && ObjectUtils.equals(problempool, other.problempool) /*&& ObjectUtils.equals(context, other.context) ��ʱ����������*/) { return true; } } return super.equals(obj); } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) */ @Override protected IStatus run(IProgressMonitor monitor) { // 2012-06-25 sundl ����쳣ConcurrentModificationException���⴦�����½��д����� monitor.beginTask("check", IProgressMonitor.UNKNOWN); while(true) { Object resource = context.get(IValidateConstant.KEY_RESOUCE); if(resource!=null && resource instanceof IARESResource){ IARESResource aresResource = (IARESResource) resource; if(ErrorCheckPreferenceHelper.getInstance().isErrorCheck(aresResource.getType())){ try { for (IValidateUnit unit : units) { unit.updateProblemPool(problempool, context); monitor.worked(1); } } catch(ConcurrentModificationException e) { continue; } catch (Exception e) { e.printStackTrace(); return new Status(Status.ERROR, ARESEditorPlugin.PLUGIN_ID, "�����鷢���쳣", e); } finally { monitor.done(); } } } return Status.OK_STATUS; } } }